// 3D_Hand.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <conio.h>
#include "Renderer.h"
#include "MatchingEstimator.h"

HandModelRenderer renderer;
MatchingEstimator estimator;

void main()
{
	/* create observe map */
	renderer.initializeGLContext();
	Hypothesis h;
	h.wirst_Position=Eigen::Vector3f(0,0,1000);
	h.wirst_Rotation=Eigen::Vector3f(45,0,0);
	h.thumb_Rotation=Eigen::Vector4f(60,70,45,45);
	h.finger1_Rotation=Eigen::Vector4f(0,0,0,0);
	h.finger2_Rotation=Eigen::Vector4f(0,0,0,0);
	h.finger3_Rotation=Eigen::Vector4f(0,0,0,0);
	h.little_Rotation=Eigen::Vector4f(0,0,0,0);
	renderer.rHand.getHypothesis(h);
	cv::Mat Observe = renderer.renderHandModel();
	
	estimator.ObserveDepth=Observe;
	if (SHOW_DEBUG){
		imshow("observe depth",estimator.ObserveDepth);
		cv::waitKey();
	}
	estimator.createObserveSkin();
	

	/* create hypothesis map */
	Hypothesis h1;
	h1.wirst_Position=Eigen::Vector3f(0,0,1000);
	h1.wirst_Rotation=Eigen::Vector3f(0,0,0);
	h1.thumb_Rotation=Eigen::Vector4f(60,40,10,10);
	h1.finger1_Rotation=Eigen::Vector4f(0,40,10,10);
	h1.finger2_Rotation=Eigen::Vector4f(0,40,100,10);
	h1.finger3_Rotation=Eigen::Vector4f(0,40,100,10);
	h1.little_Rotation=Eigen::Vector4f(0,40,100,10);
	//====================================


	renderer.rHand.getHypothesis(h1);
	estimator.renderedDepth = renderer.renderHandModel();
	if (SHOW_DEBUG)
	{
		imshow("Hypothesis",estimator.renderedDepth);
		cv::waitKey();
	}


	estimator.createRenderedMap();
	estimator.getD();
	_getch();
	return;
}

